package fwmpc.resource;

import fwmpc.exception.WeiXinRuntimeException;

import java.io.UnsupportedEncodingException;
import java.util.concurrent.TimeUnit;

/**
 * 接口描述:  微信常量属性配置服务
 * <br />
 * 用于描述微信使用过程中所使用的地址、标准编码、存储标准及间隔等信息
 *
 * @author 王雷
 * @version 1.0.0
 * @date 2021/1/19 0019 上午 10:18
 */
public interface IWeiXinCommonAttribute {

    /**
     * 功能描述：初始化属性数据
     *
     * @param appId 小程序平台标识
     * @author : 王雷
     * @date : 2021/1/27 0027 下午 5:25
     */
    IWeiXinAttributeItem initAttribute(String appId) throws WeiXinRuntimeException;

    /**
     * 功能描述：微信访问地址——换取Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    String giveCodeUrl();

    /**
     * 功能描述：微信访问地址——获取OpenID地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    String giveOpenIdUrl();

    /**
     * 功能描述：微信访问地址——换取Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    String giveWebTokenUrl();

    /**
     * 属性描述：微信访问地址——推送模版消息
     *
     * @date : 2023/2/1 0001 上午 9:57
     */
    String giveSendTemplateMessageUrl();

    /**
     * 功能描述：微信访问地址——换取Ticket地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    String giveWebTicketUrl();

    /**
     * 功能描述：微信访问地址——获取用户信息地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:49
     */
    String giveUserInfoUrl();

    /**
     * 功能描述：微信访问地址——换取Access_Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    String giveAccessTokenUrl();

    /**
     * 功能描述：微信访问地址——换取Access_Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    String giveRefreshAccessTokenUrl();

    /**
     * 功能描述：微信访问地址——刷新Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    String giveJsapiTicketUrl();

    /**
     * 功能描述：微信访问地址——下单地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    String giveUnifiedOrderUrl();

    /**
     * 功能描述：微信访问地址——退款地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    String giveRefundPayOrderUrl();

    /**
     * 功能描述：微信访问地址——查询订单地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    String giveSearchOrderUrl();

    /**
     * 功能描述：微信访问地址——关闭订单地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    String giveCloseOrderUrl();

    /**
     * 功能描述：微信访问地址——订单退款地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    String giveRefundOrderUrl();

    /**
     * 功能描述：微信访问地址——提现地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    String giveWithdrawUrl();

    /**
     * 功能描述：微信访问地址——下单回调接口
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    String giveCodeUrlEncodeUrl() throws UnsupportedEncodingException;

    /**
     * 功能描述：微信访问地址——获取微信二维码地址
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    String giveGenerateQrCodeUrl();

    /**
     * 功能描述：微信访问地址——获取素材总数
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    String giveMaterialCountUrl();

    /**
     * 功能描述：微信访问地址——获取素材列表
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    String giveMaterialDataUrl();

    /**
     * 功能描述：微信访问地址——获取微信菜单
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    String giveWxMenuUrl();

    /**
     * 功能描述：微信访问地址——更新微信菜单
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    String giveUpdateWxMenuUrl();

    /**
     * 功能描述：微信访问地址——是否关注
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    String giveIsAttentionUrl();

    /**
     * 功能描述：微信访问地址——批量为用户打标签
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    String giveBatchUserByTagUrl();

    /**
     * 功能描述：定时器执行间隔
     *
     * @author : 王雷
     * @date : 2021/1/19 0019 下午 8:23
     */
    Long giveExecutionInterval();

    /**
     * 功能描述：定时器执行间隔单位
     *
     * @author : 王雷
     * @date : 2021/1/19 0019 下午 8:23
     */
    TimeUnit giveExecutionIntervalUnit();

//    /**
//     * 功能描述：根据Key获取配置单项
//     *
//     * @return 配置集合
//     * @author : 王雷
//     * @date : 2021/1/21 0021 上午 10:17
//     */
//    Map<String, IWeiXinAttributeItem> giveAttributeItem();
//
//    /**
//     * 功能描述：根据Key获取配置单项
//     *
//     * @return 单项配置信息
//     * @author : 王雷
//     * @date : 2021/1/21 0021 上午 10:17
//     */
//    IWeiXinAttributeItem giveAttributeItem(String appId);
}
